package org.ehe.common.mybatis.utils;


import org.ehe.common.mybatis.core.page.TableDataInfo;

import java.util.Collections;
import java.util.List;

/**
 * 手动分页
 * @author :zhangnn
 * @className :PaginationUtils
 * @description: TODO
 * @date 2025-07-16 16:46:59
 */
public class PaginationUtils {
    /**
     * 对列表进行手动分页
     *
     * @param allData 所有数据列表
     * @param pageNum 页码（从1开始）
     * @param pageSize 每页条数
     * @param <T> 列表元素类型
     * @return 分页结果对象
     */
    public static <T> TableDataInfo getPagedData(List<T> allData, int pageNum, int pageSize) {
        // 校验参数合法性
        if (pageNum < 1) {
            pageNum = 1;
        }
        if (pageSize < 1) {
            pageSize = 10; // 默认每页10条
        }

        TableDataInfo rspData = new TableDataInfo();
        rspData.setTotal(allData.size()); // 设置总记录数

        // 计算起始索引
        int startIndex = (pageNum - 1) * pageSize;
        // 如果起始索引超过总条数，返回空列表
        if (startIndex >= allData.size()) {
            rspData.setRows(Collections.emptyList());
            return rspData;
        }

        // 计算结束索引（取最小值避免越界）
        int endIndex = Math.min(startIndex + pageSize, allData.size());
        // 截取分页数据
        rspData.setRows(allData.subList(startIndex, endIndex));

        return rspData;
    }
}
